home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mission 3
/
Mission 3.zip
/
Mission 3.iso
/
zugabe
/
va45
/
visual45
/
objects
/
form
/
text.s
< prev
Wrap
Text File
|
1998-09-06
|
9KB
|
331 lines
DATA
GWVA_FTEXT_DEFAULT_METHODLIST:
ifd MDL_FORM_EDITABLE_TEXT
GWVA_OBJ_STRUCT_METHOD GWVA_METHOD_FORM_KEYPRESS,GWVA_FTEXT_PRG_KEYPRESS
GWVA_OBJ_STRUCT_METHOD GWVA_METHOD_FORM_KEYBD,GWVA_FORM_PRG_FORM_KEYB
GWVA_OBJ_STRUCT_METHOD GWVA_METHOD_FORM_OBJC_EDIT,GWVA_FORM_PRG_FORM_OBJC_EDIT
ifd OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
GWVA_OBJ_STRUCT_METHOD GWVA_METHOD_FORM_CLICK,GWVA_FTEXT_PRG_CLICK
endc ; OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
endc ; ifd MDL_FORM_EDITABLE_TEXT
GWVA_OBJ_STRUCT_METHOD GWVA_METHOD_CREATE,GWVA_FTEXT_PRG_CREATE
GWVA_OBJ_STRUCT_METHOD_END_LIST
TEXT
;!!!!!!!!!!!!!!!!!!!!!
ifd MDL_FORM_EDITABLE_TEXT
;!!!!!!!!!!!!!!!!!!!!!
ifd OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
;------------------------------------------------------------------------------
; Method name : GWVA_METHOD_FORM_CLICK
; Asm label : GWVA_FTEXT_PRG_CLICK
; Description : Méthode de traitement d'un clic dans un formulaire
;
; Rq : cette méthode traite le clic dans un champs de texte éditable
;
; in : a0.l = pointeur sur l'objet
; in : a1.l = pointeur sur le buffer d'entrée typé GWVA_FORM_CLICK_IN
; in : d0.l = [ X.w | num gem.w ]
; in : d1.l = [ Y.w | mouse button.w ]
; in : d2.l = [ Key state.w | mouse count.w ]
; out : d6.w = GWVA_PRGRET_NOT_CONSUMED ou GWVA_PRGRET_CONSUMED
;
; 05/09/98 : Création
;------------------------------------------------------------------------------
GWVA_FTEXT_PRG_CLICK:
GWVA_EXEC_VISUAL_EVENT #GWVA_METHOD_ON_FORM_CLICK
cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
beq .pas_textclick_car_on_textclick_consomme
;-----------------------------------;
cmp.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d0
bne .je_ne_suis_pas_concerne_par_ce_msg
save.l d0-d2/a0-a1
move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a0
bsr GWVA_WFORM_HIDE_CURSOR
load.l d0-d2/a0-a1
* save.l d0-d2/a0-a1
; d0 à jour ; No objet
move.l d0,d1
swap d1 ; X
move.l GWVA_FORM_CLICK_IN_WIND_PTR(a1),a0
bsr GWVA_FORM_PRG_DRAW_CURSOR_X
* load.l d0-d2/a0-a1
;-----------------------------------;
.pas_textclick_car_on_textclick_consomme:
moveq #GWVA_PRGRET_CONSUMED,d6
rts
.je_ne_suis_pas_concerne_par_ce_msg:
moveq #GWVA_PRGRET_NOT_CONSUMED,d6
rts
endc ; OPT_GWVA_WFORM_POS_CURS_WITH_MOUSE
;------------------------------------------------------------------------------
; Method name : GWVA_METHOD_FORM_KEYPRESS
; Asm label : GWVA_FTEXT_PRG_KEYPRESS
; Description : Méthode pour traiter l'effet de l'appui d'une touche sur un champ texte
;
; in : a0.l = pointeur sur l'objet
; in : a1.l = pointeur sur la fenêtre formulaire contenant l'objet
; in : a2.l = pointeur sur l'arbre formulaire en question
; in : d0.w = index GEM de l'objet devant faire l'objc_edit
; in : d1.w = position du curseur
; in : d2.w = [ Key state.w | Key code.w ]
; out : d6.w = GWVA_PRGRET_NOT_CONSUMED ou GWVA_PRGRET_CONSUMED
;
; 09/05/98 : Création
;------------------------------------------------------------------------------
GWVA_FTEXT_PRG_KEYPRESS:
GWVA_EXEC_VISUAL_EVENT #GWVA_METHOD_ON_FORM_KEYPRESS
cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
beq .pas_keypress_car_on_keypress_consomme
;-----------------------------------;
cmp.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d0
bne .je_ne_suis_pas_concerne_par_ce_msg
cmp.w #$0f09,d2 ; Tab ?
bne.s .pas_tab
move d2,d4
swap d4
and.w #%11,d4
beq.s .pas_shift_tab ; Shift+Tab ?
; oui,alors on remplace la touche par un appui sur la flèche haut
move.l #$4800,d2 ; on on efface le Key state (.l)
.pas_shift_tab:
.pas_tab:
lea FKEYB_TMP_IN_BUF,a3
move.l a1,GWVA_FORM_KEYB_IN_WIND_PTR(a3)
move.l a2,GWVA_FORM_KEYB_IN_TREE_PTR(a3)
save.l a1/a2
move.l a3,a1
lea FKEYB_TMP_OUT_BUF,a2
GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FORM_KEYBD
move.w GWVA_FORM_KEYB_OUT_RET_CODE(a2),d3
move.w GWVA_FORM_KEYB_OUT_NEW_OBJECT(a2),d4
move.w GWVA_FORM_KEYB_OUT_KEY_OUT(a2),d5
load.l a1/a2
;-----------------------------------;
cmp.w #GWVA_SEARCH_EXEC_CONSUMED,d6
bne .touche_pas_consommee
tst d3 ; 0 = bouton 'exit' default, 1 = pas de bouton en 'default'
beq .objet_defaut_active
cmp.w d0,d4
beq .new_obj_equiv_old_obj
save.l a0-a2/d0-d2/d4
move.l a1,a0
bsr GWVA_WFORM_HIDE_CURSOR
load.l a0-a2/d0-d2/d4
; voilà pour l'index
move.w d4,GWVA_WFORM_OBJ_FOCUSED_IDX(a1)
; positionne si possible au même endroit dans le nouveau champ texte éditable
save.l a0-a2/d0-d2
move.w GWVA_WRSC_OBJ_TREE(a1),d0
move d4,d1
bsr GWVA_RSC_COUNT_TEXT_OBJ_LENGTH
move d1,d3
load.l a0-a2/d0-d2
cmp.w GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1),d3
bge.s .nouvelle_pos_inf_taille_max_champ
move.w d3,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1) ; on limite, on met au bout !
.nouvelle_pos_inf_taille_max_champ:
; calculons maintenant la position du curseur (le plus dur)
; taille courante du champs où l'on vise à mettre le curseur
save.l a0-a2/d0-d2
move.w GWVA_WRSC_OBJ_TREE(a1),d0
move.w d4,d1
bsr GWVA_RSC_RETURN_PTR_ON_TEXT
move.l a1,a0
bsr GWVA_COUNT_BYTES_0
move d0,d3
load.l a0-a2/d0-d2 ; => d3
cmp.w GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1),d3
bge.s .dans_le_champs ; on ne fait rien puisque la position est bonne
move.w d3,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1)
.dans_le_champs:
save.l a0-a2/d0-d2
move.l a1,a0
bsr GWVA_WFORM_REDRAW_CURSOR
load.l a0-a2/d0-d2
bra .new_focused_object_updated
;-----------------;
.objet_defaut_active:
save.l a0-a1
move.w d4,d0 ; index
move.l a2,a0 ; arbre
bsr GWVA_RSC_RETURN_OBJ_POS_SIZE
load.l a0-a1
asr.w #1,d2
asr.w #1,d3
add.w d2,d0 ; on tappe en plein au milieu de l'objet
add.w d3,d1
save.l a0
swap d0 ; X mot haut d0
move.l a1,a0 ; ptr fenetre
move.w GWVA_WIND_OBJ_GEM_HANDLE(a0),d0 ; handle
swap d1
move #1,d1 ; pour mettre le .w haut de d1 à 1
swap d1
moveq #1,d2 ; key state=0 | mouse count=1
GWVA_CALL_METHOD_OTHER_OBJ #GWVA_METHOD_WIND_CLICK
load.l a0
bra.s .default_object_treated
;-----------------------------------;
.touche_pas_consommee:
* tst d6 ; a-t-il réussi à la traiter ?
* beq .fkbd_a_pu_traiter_la_touche
lea FOBJC_EDIT_TMP_IN_BUF,a3
move.l a1,GWVA_FORM_OBJC_EDIT_IN_WIND_PTR(a3)
move.l a2,GWVA_FORM_OBJC_EDIT_IN_TREE_PTR(a3)
save.l d2/d5/a1/a2
move d5,d2 ; touche in pour objc_edit = out du form_keyb
move.l a3,a1
lea FOBJC_EDIT_TMP_OUT_BUF,a2
GWVA_CALL_METHOD_DIFF_METH_SAME_CLASS #GWVA_METHOD_FORM_OBJC_EDIT
move.w GWVA_FORM_OBJC_EDIT_OUT_CURS_NEW_POS(a2),d4
load.l d2/d5/a1/a2
move.w d4,GWVA_WFORM_OBJ_FOCUSED_IDX_CURSOR_POS(a1)
cmp.w #$4b00,d5 ; pas terrible, je sais (si vous avez mieux ...)
beq.s .fleche_gauche ; pas de changed : on a juste bougé le curseur
cmp.w #$4d00,d5
beq.s .fleche_droite
; Attention : positionner les paramètres d'entrée + sauver les courants
GWVA_EXEC_VISUAL_EVENT #GWVA_METHOD_FORM_CHANGED
.fleche_gauche:
.fleche_droite:
;-----------------------------------;
.default_object_treated:
.fkbd_a_pu_traiter_la_touche:
.new_focused_object_updated:
.new_obj_equiv_old_obj:
.pas_keypress_car_on_keypress_consomme:
moveq #GWVA_PRGRET_CONSUMED,d6
rts
.je_ne_suis_pas_concerne_par_ce_msg:
moveq #GWVA_PRGRET_NOT_CONSUMED,d6
rts
;-----------------------------------;
BSS
FKEYB_TMP_IN_BUF: ds.b GWVA_FORM_KEYB_IN_STRUCT_LENGTH
FKEYB_TMP_OUT_BUF: ds.b GWVA_FORM_KEYB_OUT_STRUCT_LENGTH
FOBJC_EDIT_TMP_IN_BUF: ds.b GWVA_FORM_OBJC_EDIT_IN_STRUCT_LENGTH
FOBJC_EDIT_TMP_OUT_BUF: ds.b GWVA_FORM_OBJC_EDIT_OUT_STRUCT_LENGTH
TEXT
;------------------------------------------------------------------------------
;!!!!!!!!!!!!!!!!!!!!!
endc ; ifd MDL_FORM_EDITABLE_TEXT
;!!!!!!!!!!!!!!!!!!!!!
;------------------------------------------------------------------------------
; Method name : GWVA_METHOD_CREATE
; Asm label : GWVA_FTEXT_PRG_CREATE
; Description : Création d'un objet formulaire
;
; in : a0.l = pointeur sur l'objet
; in : a1.l = pointeur sur la fenêtre
; in : a2.l = pointeur sur le tree du ressource
; out : d6.w = GWVA_PRGRET_CONSUMED
; out : d7.w = GWVA_NO_ERROR_GENERIC ou erreur
; GWVA_ERROR_BAD_CLASS
;
; 09/05/98 : Création
;------------------------------------------------------------------------------
GWVA_FTEXT_PRG_CREATE:
GWVA_CHECK_OBJ_HANDLE
;-----------------------------------;
move.w GWVA_WRSC_OBJ_TREE(a1),d0
move.w GWVA_FTEXT_OBJ_MAIN_IDX(a0),d1
save.l a0-a2
bsr GWVA_RSC_RETURN_PTR_ON_TEXT
move.l a0,a3
move.l a1,a4
load.l a0-a2
move.l a3,GWVA_FTEXT_OBJ_MAIN_PTR(a0)
move.l a4,GWVA_FTEXT_OBJ_STRING_PTR(a0)
;-----------------------------------;
; envoyer la méthode GWVA_METHOD_CREATED
GWVA_EXEC_VISUAL_EVENT #GWVA_METHOD_CREATED
moveq #GWVA_PRGRET_CONSUMED,d6
moveq #GWVA_NO_ERROR_GENERIC,d7
rts
.bad_object_class:
move #GWVA_ERROR_BAD_CLASS,d7 ; pas une classe formulaire
moveq #GWVA_PRGRET_CONSUMED,d6
rts